Ejemplo CNC 16: Función de sondeo (distancia libre restante) (G31)
Vea el CNC16_G31.project proyecto de ejemplo en el directorio de instalación de CODESYS debajo ..\CODESYS SoftMotion\Examples.
El proyecto de ejemplo muestra cómo utilizar la función de sondeo (distancia restante libre).
En el ejemplo, la máquina se mueve en la dirección X hasta que se alcanza una barrera de luz en X=50. Tan pronto como se alcance la barrera de luz, la máquina debe detenerse. El código G restante debe procesarse a partir de esta posición
Estructura de la solicitud
La estructura es típica de las aplicaciones de CNC. El código G se lee en la tarea en segundo planoPathTask). El preprocesamiento de rutas también se realiza en esta tarea. La interpolación se realiza en la tarea del busMainTask).
utiliza el siguiente código G. En bloque N10, se realiza un posicionamiento rápido para X = 20. Luego, con la G31 (función de sondeo: despejar el camino restante), se realiza un movimiento X = 100. Finalmente, en bloque N30, se realiza un movimiento lineal para X = 20, Y = 50.
N10 G0 X20 F100 E1000 E-1000 N20 G31 X100 N30 G1 X20 Y50
La interacción entre el interpolador y el intérprete es particularmente importante para la función de sondeo (borrar la ruta restante).
El intérprete decodifica el código G y genera una línea recta a partir de
X=20paraX=100para bloquearN20. Luego deja de decodificar.El interpolador realiza el movimiento lineal y emite simultáneamente el número de sonda como salida
udiActProbe. Para el G31, el número de muestra es siempre 1En la aplicación, el interpolador se detiene con
bQuick_Stoptan pronto como la unidad se desplace más allá de su posiciónX=50. (Esto simula la barrera de luz).
En la tarea del autobús, el
SMC_SetInterpreterStartPositionel bloque de funciones se usa para copiar continuamente la posición actual de la máquina.
En el
PathTask, la posición inicial se asigna a la entradaSMC_NCInterpreter.piStartPosition:inter( sentences:= read.sentences, bExecute:= read.bExecute, nSizeOutQueue:= SIZEOF(bufIpo), pbyBufferOutQueue:= ADR(bufIpo), piStartPosition:= Main.setStart.StartPos);
Tan pronto como se detenga el interpolador,
bAcknProbeentrada se usa para confirmar el comando G31. En una aplicación real, también se debe comprobar en este punto que los ejes han alcanzado realmente la posición de parada. SMC_InPosition el bloque de funciones se puede usar para hacer esto.
Esto hace que el intérprete reanude la decodificación, pero con la posición de inicio actualizada, de modo que el siguiente bloque
N30se inicia desde la posiciónX=55.5.
En el siguiente diagrama se muestran estos pasos. Los números entre paréntesis se refieren a los pasos correspondientes del proceso descrito anteriormente.

Puesta en servicio
Cree la aplicación y descárguela en un controlador.
Abra la traza y descárguela al controlador.
Inicie la aplicación y abra la visualización.